package nonre.sgy.gencode.base.service;

import java.util.List;
import java.util.Map;

import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import nonre.sgy.gencode.base.entity.BaseEntity;

/**
 * 
 * @author sgy
 * 
 * 必须保证事务的可用，spring配置红需要添加tx:annotation-driven。
 * 为了与具体实现类的aop事务管理解绑，此处使用注解的事务形式。
 *
 * @param <En> 实体类型
 * @param <K> id类型
 */
public abstract class BaseServiceImpl<En extends BaseEntity, K> implements BaseService<En, K> {

	
	public void test() {
	}

	@Transactional(propagation=Propagation.REQUIRED, value="transactionManager")
	public K save(En en) {
		return getDao().save(en);
	}

	@Transactional(propagation=Propagation.REQUIRED, value="transactionManager")
	public En update(En en) {
		return getDao().update(en);
	}

	@Transactional(propagation=Propagation.REQUIRED, value="transactionManager")
	public void delete(En en) {
		getDao().delete(en);
	}

	@Transactional(propagation=Propagation.REQUIRED, value="transactionManager")
	public void delById(K id) {
		getDao().delById(id);
	}

	@Transactional(propagation=Propagation.SUPPORTS, value="transactionManager")
	public En findById(K id) {
		return getDao().findById(id);
	}

	@Transactional(propagation=Propagation.SUPPORTS, value="transactionManager")
	public List<En> getAll() {
		return getDao().getAll();
	}

	@Transactional(propagation=Propagation.SUPPORTS, value="transactionManager")
	public List<En> findList(String hql, Map<String, String> params) {
		return getDao().findList(hql, params);
	}

	

}
